package com.zjb.demo.system.mapper;

import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;
import com.zjb.demo.system.domain.SysUserRole;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

import static com.zjb.demo.system.domain.table.SysUserRoleTableDef.SYS_USER_ROLE;

/**
 * @author 庄佳彬
 * @since 2023/12/31 11:44
 */
@Mapper
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
    /**
     * 计算具有特定角色ID的用户角色数量
     *
     * @param roleIds 角色ID列表
     * @return 用户角色数量
     */
    default long countUserRoleByRoleId(List<Long> roleIds) {
        return QueryChain.of(this)
                .select(SYS_USER_ROLE.ALL_COLUMNS)
                .from(SYS_USER_ROLE)
                .where(SYS_USER_ROLE.ROLE_ID.in(roleIds))
                .count();
    }

    /**
     * 通过用户ID删除用户角色关系
     *
     * @param userId 用户ID
     * @return 删除是否成功
     */
    default boolean deleteByUserId(Long userId) {
        var query = QueryWrapper.create()
                .where(SYS_USER_ROLE.USER_ID.eq(userId));
        return this.deleteByQuery(query) > 0;
    }


    /**
     * 通过用户ID列表删除用户角色关系
     *
     * @param id 用户ID列表
     * @return 删除是否成功
     */
    default boolean deleteByUserIds(List<Long> id){
        var query = QueryWrapper.create()
                .where(SYS_USER_ROLE.USER_ID.in(id));
        return this.deleteByQuery(query) > 0;
    }

}
